package com.atguigu.spring.jdbc.dao;

import com.atguigu.spring.jdbc.entity.City;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @author yanglin
 * @create 2023-12-12 17:20 星期二
 * description:
 */
@Repository
public class CityDaoImpl implements CityDao {
    
    @Autowired
    JdbcTemplate jdbcTemplate;


    /**
     * 添加
     * @param city
     */
    @Override
    public void addCity(City city) {
        /**
         * 参数1：sql语句
         * 参数2：可变参数，设置sql语句中的值
         */
        String sql = "insert into city(name,state ,country) values(?,?,?)";
        int update = jdbcTemplate.update(sql, city.getName(), city.getState(), city.getCountry());
        System.out.println(update);
    }

    /**
     * 修改的方法
     * @param city
     */
    @Override
    public void updateCity(City city) {
        String sql = "update city set name=?,state=? where id=?";
        jdbcTemplate.update(sql,city.getName(),city.getState(),city.getId());
    }

    /**
     * 删除的方法
     * @param id
     */
    @Override
    public void deleteCity(Integer id) {
        String sql = "delete from city where id = ?";
        jdbcTemplate.update(sql,id);
    }


    /**
     * 查询记录数
     * @return
     */
    @Override
    public Integer findCount() {
        String sql = "select count(*) from city";
        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
        return integer;
    }


    /**
     * 查询城市，返回一个对象
     * @param id
     * @return
     */
    @Override
    public City findOne(Integer id) {
        String sql = "select * from city where id = ?";
        Object[] args = {id};
        /**
         * 第一个参数：sql语句
         * 第二个参数：RowMapper 是接口，返回不同类型的数据，使用这个接口里面实现类完成数据封装
         * 第三个参数：sql语句的值
         */
        City city = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<City>(City.class), args);
        return city;
    }


    /**
     * 查询城市  返回一个集合
     * @return
     */
    @Override
    public List<City> findList() {
        
        String sql = "select * from city";
        List<City> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<City>(City.class));
        return list;
    }


    /**
     * 批量添加
     * @param batchArgs
     */
    @Override
    public void batchAdd(List<Object[]> batchArgs) {
        String sql = "insert into city(name,state ,country) values(?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }


    /**
     * 批量修改
     * @param batchArgs
     */
    @Override
    public void batchUpdate(List<Object[]> batchArgs) {
        String sql = "update city set name=?,state=?,country=? where id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }


    /**
     * 批量删除
     * @param batchArgs
     */
    @Override
    public void batchDelete(List<Object[]> batchArgs) {
        String sql = "delete from city where id = ?";
        jdbcTemplate.batchUpdate(sql,batchArgs);
    }


}
